package edu.hubu.netdisk.utils;

import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author waxijiang
 */
public class FileUtils {
    public static Map<String, List<String>> FILETYPE;

    static {
        FILETYPE = new HashMap<>();
        FILETYPE.put("pdf", new ArrayList<String>() {{
            add("pdf");
        }});
        FILETYPE.put("compress_file", new ArrayList<String>() {{
            add("tar");
            add("war");
            add("jar");
            add("zip");
            add("7z");
            add("bz");
            add("gz");
            add("xz");
        }});

        FILETYPE.put("web", new ArrayList<String>() {{
            add("html");
        }});

        FILETYPE.put("video", new ArrayList<String>() {{
            add("mp4");
            add("avi");
            add("flv");
            add("f4v");
        }});

        FILETYPE.put("audio", new ArrayList<String>() {{
            add("mp3");
        }});

        FILETYPE.put("picture", new ArrayList<String>() {{
            add("png");
            add("jpg");
            add("jpeg");
            add("gif");
            add("bmp");
            add("svg");
        }});

        FILETYPE.put("doc", new ArrayList<String>() {{
            add("doc");
            add("docx");
        }});

        FILETYPE.put("txt", new ArrayList<String>() {{
            add("txt");
            add("md");
        }});

        FILETYPE.put("torrent", new ArrayList<String>() {{
            add("torrent");
        }});

        FILETYPE.put("ppt", new ArrayList<String>() {{
            add("ppt");
            add("pptx");
        }});

        FILETYPE.put("code", new ArrayList<String>() {{
            add("c");
            add("cpp");
            add("java");
            add("py");
            add("js");
            add("css");
            add("csharp");
            add("php");
        }});
    }

    /**
     * 用于返回格式化的文件大小格式
     *
     * @param f 文件对象
     * @return 字符串类型的文件大小
     */
    public static String sizeFormat(File f) {
        double len = (f.length() / 1024d);
        String size;
        if (len > 1 && len < 1024) {
            len = new BigDecimal(len).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
            size = len + "K";
        } else {
            len = len / 1024d;
            if (len > 1 && len < 1024) {
                len = new BigDecimal(len).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
                size = len + "M";
            } else {
                len = new BigDecimal(len / 1024d).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
                size = len + "G";
            }
        }
        return size;
    }

    public static String getFileType(File file) {
        if (file.isDirectory()) {
            return "folder";
        } else {
            String[] tmp = file.getName().split("\\.");
            String fileSuffix = tmp[tmp.length - 1];

            for (Map.Entry<String, List<String>> entry : FILETYPE.entrySet()) {
                for (String fileType : entry.getValue()) {
                    if (fileSuffix.equals(fileType)) {
                        return entry.getKey();
                    }
                }
            }
            return "default";
        }
    }
}
